from PIL import Image, ImageDraw, ImageFont

def generate_led_matrix(char, width=10, height=10, font_path=None, font_size=16):
    """
    生成单个汉字的LED点阵图。

    :param char: 要转换的单个汉字。
    :param width: LED点阵的宽度。
    :param height: LED点阵的高度。
    :param font_path: 字体文件的路径。如果为None，会尝试使用系统默认字体。
    :param font_size: 字体大小。
    :return: 一个包含'*'和' '的二维列表，表示点阵图。'*'代表点亮，' '代表熄灭。
    """
    # 1. 创建一个空白的灰度图像，背景为黑色(0)，尺寸比点阵略大以方便居中
    img = Image.new('L', (width + 4, height + 4), 0)
    
    # 2. 创建绘图对象
    draw = ImageDraw.Draw(img)

    # 3. 加载字体
    try:
        if font_path:
            font = ImageFont.truetype(font_path, font_size)
        else:
            font = ImageFont.load_default()
            print("警告: 未指定字体路径，可能导致中文显示异常。请尽量提供中文字体路径。")
    except IOError:
        print(f"错误: 无法加载字体文件 '{font_path}'。程序将使用默认字体，可能无法正常工作。")
        font = ImageFont.load_default()

    # 4. 获取文字的边界框并计算居中位置
    bbox = draw.textbbox((0, 0), char, font=font)
    text_width, text_height = bbox[2] - bbox[0], bbox[3] - bbox[1]
    x = (img.width - text_width) // 2
    y = (img.height - text_height) // 2

    # 5. 在图像上绘制白色(255)的文字
    draw.text((x, y), char, font=font, fill=255)

    # 6. 采样点阵数据，并将亮的点用'*'表示，暗的点用空格' '表示
    matrix = []
    for y_coord in range(1, height + 1):
        row = []
        for x_coord in range(1, width + 1):
            pixel_value = img.getpixel((x_coord, y_coord))
            row.append('*' if pixel_value > 120 else ' ')
        matrix.append(row)
        
    return matrix

def print_matrix_as_stars(matrix):
    """
    以星号 '*' 的形式打印点阵矩阵。
    """
    print("生成的LED点阵图如下：")
    for row in matrix:
        # 将一行的列表元素连接成一个字符串并打印
        print("".join(row))


# --- 主程序 ---
if __name__ == "__main__":
    # --- 配置区 ---
    chinese_char = "陶 兴 淇"  # 要转换的汉字
    led_width, led_height = 90, 25  # LED点阵的尺寸
    
    # 字体文件路径 (！！！重要！！！)
    # 请将 'C:/Windows/Fonts/msyh.ttc' 替换为你电脑上真实的字体文件路径
    # Windows示例: 'C:/Windows/Fonts/msyh.ttc' (微软雅黑)
    # Linux示例: '/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc'
    # Mac示例: '/System/Library/Fonts/PingFang.ttc' (苹方)
    font_file_path = 'C:/Windows/Fonts/msyh.ttc' 
    
    font_size = 18 # 字体大小，可根据效果微调
    
    # --- 执行区 ---
    try:
        led_matrix = generate_led_matrix(
            char=chinese_char,
            width=led_width,
            height=led_height,
            font_path=font_file_path,
            font_size=font_size
        )
        
        print(f"汉字 '{chinese_char}' 的 {led_width}x{led_height} 点阵图：")
        print_matrix_as_stars(led_matrix)

    except Exception as e:
        print(f"发生错误: {e}")
        print("请确保字体路径正确且该文件存在。")